package com.ruoyi.product.service;

import java.math.BigDecimal;
import java.util.List;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.product.domain.ProductCart;
import com.ruoyi.product.dto.PageQuery;
import com.ruoyi.product.dto.ProductCartAddParam;
import org.apache.ibatis.annotations.Param;

/**
 * 购物车Service接口
 *
 * @author tanfp
 * @date 2021-01-02
 */
public interface IProductCartService {
    /**
     * 查询购物车
     *
     * @param keyId 购物车ID
     * @return 购物车
     */
    public ProductCart selectProductCartById(Long keyId);

    /**
     * 查询购物车列表
     *
     * @param productCart 购物车
     * @return 购物车集合
     */
    public List<ProductCart> selectProductCartList(ProductCart productCart);

    public AjaxResult queryCart(Long userId);
    /**
     * 新增购物车
     *
     * @param productCart 购物车
     * @return 结果
     */
    public int insertProductCart(ProductCart productCart);

    /**
     * 修改购物车
     *
     * @param productCart 购物车
     * @return 结果
     */
    public int updateProductCart(ProductCart productCart);

    public BigDecimal updateProductCartNum(Long userId,Long cartId, Integer num);

    AjaxResult updateAllStatus(Long userId, Integer selectFlag);

    public AjaxResult updateProductCartStatus(Long userId,Integer selectFlag,List<Long> cartIds);
    /**
     * 批量删除购物车
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteProductCartByIds(String ids);

    /**
     * 删除购物车信息
     *
     * @param keyId 购物车ID
     * @return 结果
     */
    public int deleteProductCartById(Long keyId);

    /**
     * 新增购物车中的商品列表
     * @param param
     * @return
     */
    AjaxResult addCart(List<ProductCartAddParam> param, Long userId, Long productId);

    /**
     * 删除购物车中商品
     * @param userId
     * @param productIds
     * @return
     */
    AjaxResult removeCart(Long userId, List<String> productIds);

    /**
     * 查询用户商品购物车
     * @param userId
     * @return
     */
    AjaxResult queryCart(Long userId, PageQuery pageQuery);

    AjaxResult queryOrderCart(Long userId);

    List<ProductCart> selectProductCartOrdersListByUserId(Long userId);

    public int deleteProductCartByOrdersProductIds(Long userId, List<String> productIds);
    /**
     * 查询用户购物车中的商品总数
     * @param userId
     * @return
     */
    AjaxResult queryCartNum(Long userId);
}
